<?php

namespace Sbm\ControlPanel;

class LayoutAdmin extends Layout
{

	/**
	 * Список ошибок возникших на странице
	 * @var <array>
	 */
	private $errors;

	/**
	 * Список сообщения для пользователя
	 * @var <array>
	 */
	private $message;

	public function specialChars( $string )
	{
		return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
	}

	/**
	 * Функции для работы (сохранения и вывода) с сообщениями и ошибками
	 */

	/**
	 * Устанавливает сообщение для последующего вывода в шаблоне
	 * 
	 * @param string $message
	 * @return void
	 */
	public function SetMessage( $message )
	{
		$this->message = $message;
		if ( $this->use_session )
		{
			$this->SetSessionVar('message', $message);
		}
	}

	/**
	 * Возвращает сообщение
	 * 
	 * @return string
	 */
	public function GetMessage()
	{
		if ( $this->use_session )
		{
			$message = $this->GetSessionVar('message');
			$this->DeleteSessionVar('message');
			return $message;
		}
		return $this->message;
	}

	/**
	 * Возвращает html код с сообщением
	 * Если сообщение не пустое, html будет в контейнере div.%class% 
	 * 
	 * @param string $css_class
	 * @return void
	 */
	public function GetMessageHtml( $css_class = 'message' )
	{
		return ( ($message = $this->GetMessage()) ? "<div class='" . $css_class . "'>" . $message . "</div>" : '' );
	}

	/**
	 * Добавляет $error к списку ошибок
	 * 
	 * @param string $error
	 * @return void
	 */
	public function AddError( $error )
	{
		$this->errors[] = $error;
		if ( $this->use_session )
		{
			$this->SetSessionVar('errors', $this->errors);
		}
	}

	/**
	 * Устанавливает список ошибок равный $errors
	 * @param array $errors
	 * @return void
	 */
	public function SetErrors( $errors )
	{
		$this->errors = $errors;
		if ( $this->use_session )
		{
			$this->SetSessionVar('errors', $this->errors);
		}
	}

	/**
	 * Добавляет список ошибок $errors к списку ошибок $this->errors
	 * @param array $errors
	 * @return void
	 */
	public function AddErrors( $errors )
	{
		foreach ($errors as $error)
		{
			$this->AddError($error);
		}
	}

	/**
	 * Возвращает html-код со списоком ошибок
	 * @return string
	 */
	public function GetErrorsHtml()
	{
		if ( $this->use_session )
		{
			$this->GetSessionVar('errors');
			$this->DeleteSessionVar('errors');
		}

		$str = '';
		if ( is_array($this->errors) && sizeof($this->errors) > 0 )
		{
			$str.="<div class='error'>"
					. "<b>Обнаружено несколько ошибок:</b>"
					. "<ul>"
					. "<li>" . implode("</li><li>", $this->errors) . "</li>"
					. "<ul>"
					. "</div>";
		}
		return $str;
	}

	/**
	 * Другие полезные для адмники функции
	 */

	/**
	 * Возвращает html со списком todo в формах редактирования
	 * @param string $checked - выбранный пункт
	 * @param bool $exists - нужно ли добавлять текст "сохранить как новое" 
	 * @return string
	 */
	public function GetTodoHtml( $checked = 'edit-this', $exists = false )
	{
		$msg = '';
		if ( $exists )
		{
			$msg .= "<label FOR='l-save-new' ><input name='save-new' value='save-new' id='l-save-new' type='checkbox'/> сохранить запись как новую;</label><br/>";
		}
		$msg .= "<label FOR='l-edit-this'><input name='todo' value='edit-this' " . ( $checked == 'edit-this' ? 'checked ' : '' ) . "id='l-edit-this' type='radio'/> продолжить редактировать запись</label><br/>"
				. "<label FOR='l-list'     ><input name='todo' value='list'      " . ( $checked == 'list' ? 'checked ' : '' ) . "id='l-list' type='radio'/> вернуться к списку записей</label><br/>"
				. "<label FOR='l-main-page'><input name='todo' value='main-page' " . ( $checked == 'main-page' ? 'checked ' : '' ) . "id='l-main-page' type='radio'/> вернуться на главную страницу</label>";
		return $msg;
	}

	/**
	 * Делает редирект на нужную страницу
	 * 
	 * @param string $todo
	 * @param int $id
	 * @return void
	 */
	public function RedirectTodo( $todo, $id = NULL )
	{
		global $mod, $act;

		switch ($todo)
		{
			case 'edit-this':
				header("Location: ./?mod=" . $mod . "&act=edit&id=" . $id);
				break;
			case 'main-page':
				header("Location: ./");
				break;
			case 'list':
			default:
				header("Location: ./?mod=" . $mod);
				break;
		}
		exit();
	}

}